import logging

from init import create_app

app = create_app()

# 获取调度器实例
scheduler = app.scheduler

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

# 启动调度器
if __name__ != '__main__':
    # 在 Gunicorn 环境下启动调度器
    try:
        scheduler.start()
        logger.info('定时任务调度器已启动')

        # 记录已注册的定时任务信息
        logger.info('已注册的定时任务:')
        for job in scheduler.get_jobs():
            logger.info(f'  - 任务名称: {job.name}')
            logger.info(f'    任务ID: {job.id}')
            logger.info(f'    下次执行时间: {job.next_run_time}')
            logger.info(f'    执行周期: {job.trigger}')
            logger.info('-' * 50)

        logger.info('所有定时任务调度器已启动，详情请查看上方列表')
    except Exception as e:
        logger.error(f'启动调度器时发生错误: {e}')

if __name__ == '__main__':
    # 生产环境下运行
    try:
        logger.info('正在启动应用...')
        # 启动调度器
        scheduler.start()
        logger.info('定时任务调度器已启动')

        # 记录已注册的定时任务信息
        logger.info('已注册的定时任务:')
        for job in scheduler.get_jobs():
            logger.info(f'  - 任务名称: {job.name}')
            logger.info(f'    任务ID: {job.id}')
            logger.info(f'    下次执行时间: {job.next_run_time}')
            logger.info(f'    执行周期: {job.trigger}')
            logger.info('-' * 50)

        logger.info('所有定时任务调度器已启动，详情请查看上方列表')
        logger.info('正在启动Flask应用...')
        # 启动Flask应用
        app.run(host='0.0.0.0', port=9201, debug=False)
    except (KeyboardInterrupt, SystemExit):
        # 优雅关闭调度器
        scheduler.shutdown()
        logger.info('定时任务调度器已关闭')
    except Exception as e:
        logger.error(f'启动过程中发生错误: {e}')
        import traceback
        traceback.print_exc()